/**
 * 
 */
package com.enjoyor.soa.traffic.api.service.dubbo.idcs;

import com.enjoyor.soa.traffic.api.dto.idcs.InterceptPointDto;
import com.enjoyor.soa.traffic.api.dto.idcs.RltInterceptBayonetDto;
import com.enjoyor.soa.traffic.api.dto.idcs.RltInterceptPoliceDto;
import com.enjoyor.soa.traffic.util.pojo.Page;
import com.enjoyor.soa.traffic.util.pojo.ResultPojo;

import java.util.List;
import java.util.Map;

/**
 * 拦截点信息服务
 * 
 * @author ly
 *
 */
public interface DubboInterceptPointService {
    /**
     * 获取拦截点列表
     * 
     * @param systemKey
     *            系统秘钥
     * @param token
     *            系统令牌
     * @param interceptName
     *            拦截点名称
     * @param regionId
     *            区域编号
     * @param interceptStatus
     *            拦截点状态
     * @param interceptIds
     *            卡口编号列表
     * @param personIds
     *            用户列表
     * @param deptIds
     *            部门列表      
     * @return List<InterceptPoint> 拦截点列表
     */
    public ResultPojo getInterceptPointList(String systemKey, String token, String interceptName, String regionId,
            String interceptStatus, List<String> listBayonetIds, List<String> interceptIds,
            List<String> personIds, List<String> deptIds);

    /**
     * 获取拦截点分页列表
     * 
     * @param systemKey
     *            系统秘钥
     * @param token
     *            系统令牌
     * @param interceptName
     *            拦截点名称
     * @param regionId
     *            区域编号
     * @param interceptStatus
     *            拦截点状态
     * @param interceptIds
     *            卡口编号列表
     * @param personIds
     *            用户列表
     * @param deptIds
     *            部门列表    
     * @param page
     *            分页
     * @return Page<InterceptPoint> 拦截点分页列表
     */
    @SuppressWarnings("rawtypes")
    public ResultPojo getInterceptPointPage(String systemKey, String token, String interceptName, String regionId,
            String interceptStatus, List<String> listBayonetIds, List<String> interceptIds,
            List<String> personIds, List<String> deptIds,Page page);

    /**
     * 新增拦截点
     * 
     * @param systemKey
     *            系统秘钥
     * @param token
     *            系统令牌
     * @param interPoint
     *            拦截点
     * @return String 新增的拦截点编号
     */
    public ResultPojo insertInterceptPoint(String systemKey, String token, InterceptPointDto interPoint);

    /**
     * 更新拦截点
     * 
     * @param systemKey
     *            系统秘钥
     * @param token
     *            系统令牌
     * @param interPoint
     *            拦截点
     * @return String 更新的拦截点编号
     */
    public ResultPojo updateInterceptPoint(String systemKey, String token, InterceptPointDto interPoint);

    /**
     * 删除拦截点
     * 
     * @param systemKey
     *            系统秘钥
     * @param token
     *            系统令牌
     * @param interPointId
     *            拦截点编号
     * @return String 删除的拦截点编号
     */
    public ResultPojo deleteInterceptPoint(String systemKey, String token, String interPointId);

    /**
     * 获取拦截点和卡口关联列表
     * 
     * @param systemKey
     *            系统秘钥
     * @param token
     *            系统令牌
     * @param interPointIds
     *            拦截点编号列表
     * @return List<RltInterceptbayonet> 拦截点和卡口关联列表
     */
    public ResultPojo getRltInterceptBayonetList(String systemKey, String token, List<String> interPointIds);

    /**
     * 获取拦截点和卡口关联列表,排列显示车道
     * 
     * @param systemKey
     *            系统秘钥
     * @param token
     *            系统令牌
     * @param interPointIds
     *            拦截点编号列表
     * @return List<RltInterceptbayonet> 拦截点和卡口关联列表
     */
    public ResultPojo getRltInterceptBayonetListWithLane(String systemKey, String token, List<String> interPointIds);

    /**
     * 新增拦截点和卡口关联
     * 
     * @param systemKey
     *            系统秘钥
     * @param token
     *            系统令牌
     * @param interPointId
     *            拦截点编号
     * @param bayonetIds
     *            卡口编号列表
     * @return String 返回新增的卡口编号
     */
    public ResultPojo insertRltInterceptBayonet(String systemKey, String token, List<RltInterceptBayonetDto> list);

    /**
     * 删除拦截点和卡口关联
     * 
     * @param systemKey
     *            系统秘钥
     * @param token
     *            系统令牌
     * @param interPointId
     *            拦截点编号
     * @return String 删除的拦截点编号
     */
    public ResultPojo deleteRltInterceptBayonet(String systemKey, String token, String interPointId);

    /**
     * 获取拦截点和警员关联列表
     * 
     * @param systemKey
     *            系统秘钥
     * @param token
     *            系统令牌
     * @param interPointIds
     *            拦截点编号列表
     * @return List<RltIntercepPolice> 拦截点和警员关联列表
     */
    public ResultPojo getRltIntercepPoliceList(String systemKey, String token, List<String> interPointIds);

    /**
     * 新增拦截点和警员关联
     * 
     * @param systemKey
     *            系统秘钥
     * @param token
     *            系统令牌
     * @param interPointId
     *            拦截点编号
     * @param policeIds
     *            警员编号列表
     * @return String 新增的关联编号
     */
    public ResultPojo insertRltInterceptPolice(String systemKey, String token, List<RltInterceptPoliceDto> list);

    /**
     * 删除拦截点和警员关联
     * 
     * @param systemKey
     *            系统秘钥
     * @param token
     *            系统令牌
     * @param interPointId
     *            拦截点编号
     * @return String 删除的关联编号
     */
    public ResultPojo deleteRltInterceptPolice(String systemKey, String token, String interPointId);

    /**
     * 获取拦截点数量统计
     * 
     * @param systemKey
     *            系统秘钥
     * @param token
     *            系统令牌
     * @return Map<String, Object> 包括启用拦截点数，未启用拦截点数，启用拦截点警员数
     */
    public ResultPojo getInterceptCount(String systemKey, String token);
    
    /**
     * 获取各拦截点状态、关联警员数、报警数和拦截点编号名称
     * @param systemKey
     * @param token
     * @return
     */
    public ResultPojo getCountForIntercept(String systemKey, String token);
    
    /**
     * 获取拦截点数量和相关警员数量
     * 
     * @param map
     * @return
     */
    List<Map<String, Object>> getInterceptCountAndPoliceCount(Map<String, Object> map);

    /**
     * 拦截点报警排名
     * 
     * @param map
     * @return
     */
    List<Map<String, Object>> interceptorPointByRegionType(Map<String, Object> map);
}
